﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;
using DAL;
using Exceptions;

namespace BLL
{
    public class BLLTransporte
    {
        public List<BTO.Transporte> list()
        {
            DALTransporte transportes = new DALTransporte();
            return transportes.list();
        }

        public BTO.Transporte getByID(int? id)
        {
            DALTransporte dalTransporte = new DALTransporte();
            BTO.Transporte btoTransporte = dalTransporte.getByID(id);

            if (btoTransporte == null) {
                throw new NotFoundTranporteException("Transporte não encontrado!");
            }

            return btoTransporte;
        }

        public List<BTO.Transporte> getByTipoTransporte(int idTipoTransporte)
        {
            DALTransporte dalTransporte = new DALTransporte();
            List<BTO.Transporte> btoTransportes = dalTransporte.getByTipoTransporte(idTipoTransporte);

            if (btoTransportes.Count()==0) {
                throw new NotFoundTransportesByTipoException("Nenhum transporte deste tipo encontrado!");
            }
            
            return btoTransportes;
        }

        public List<BTO.Transporte> getByIDPartida(int idPartida)
        {
            DALTransporte dalTransporte = new DALTransporte();
            List<BTO.Transporte> btoTransportes = dalTransporte.getByIDPartida(idPartida);

            if (btoTransportes.Count() == 0)
            {
                throw new NotFoundTranporteException("Nenhum transporte com esta origem!");
            }

            return btoTransportes;
        }

        public List<BTO.Transporte> getByIDChegada(int idChegada)
        {
            DALTransporte dalTransporte = new DALTransporte();
            List<BTO.Transporte> btoTransportes = dalTransporte.getByIDChegada(idChegada);

            if (btoTransportes.Count() == 0)
            {
                throw new NotFoundTranporteException("Nenhum transporte com este destino!");
            }

            return btoTransportes;
        }

        public void insert(BTO.Transporte toInsert)
        {
            DALTransporte dalTransporte = new DALTransporte();
            BTO.Transporte btoTransporte = dalTransporte.getByID(toInsert.IDTransporte);

            try
            {
                dalTransporte.insert(toInsert);
            }
            catch (Exception e) {
                throw new InsertTransporteException(e.Message);
            }
        }

        public void update(BTO.Transporte toUpdate)
        {
            DALTransporte dalTransporte = new DALTransporte();
            BTO.Transporte btoTransporte = dalTransporte.getByID(toUpdate.IDTransporte);

            try
            {
                dalTransporte.update(toUpdate);
            }
            catch (Exception e) {
                throw new UpdateTransporteException(e.Message);
            }
        }

        public void delete(int id)
        {
            DALTransporte dalTransporte = new DALTransporte();

            try
            {
                dalTransporte.delete(id);
            }
            catch (Exception e)
            {
                throw new DeleteTipoTransporteException(e.Message);
            }
        }
    }
}
